#include <iostream>
using namespace std;
template <class T>
class SqList{
private:
    T *elem;
    int curlen;
    int maxlen;
public:
    SqList(int maxsize=100);
    SqList(T a[],int n,int maxsize=100);
    ~SqList(){
        delete[] elem;
    }
    void init(){
        curlen=0;
    }
    T getelem(int i);
    int length(){
        return curlen;
    }
    int locate(T &e1);
    bool insert(int loc,T &e1);
    T dele(int loc);
    bool full(){
        return curlen==maxlen;
    }
    bool empty(){
        return curlen==0;
    }
    void inverse();
    void print();
};
template <class T>
SqList<T>::SqList(int maxsize):maxlen(maxsize) {
    curlen=0;
    elem=new T[maxlen];
}
template <class T>
SqList<T>::SqList(T a[],int n,int maxsize):maxlen(maxsize) {
    curlen=n;
    elem=new T[maxlen];
    for(int i=0;i<n;i++){
        elem[i]=a[i];
    }
}
template <class T>
int SqList<T>::locate(T &e1) {
    int i=0;
    while((i<curlen) && (elem[i]!=e1)){
        i++;
    }
    if(i<curlen){
        return (i+1);
    } else{
        return (0);
    }
}
template <class T>
bool SqList<T>::insert(int loc, T &e1) {
    int i;
    if((loc<1)||(loc>curlen+1)||(curlen==maxlen)){
        return false;
    } else{
        curlen++;
        for(i=curlen-1;i>=loc;i--){
            elem[i]=elem[i-1];
        }
        elem[loc-1]=e1;
        return true;
    }
}
template <class T>
T SqList<T>::dele(int loc) {
    int i;
    T e1;
    if((loc<1)||(loc>curlen)){
        return NULL;
    } else{
        e1=elem[loc-1];
        for(i=loc;i<curlen;i++){
            elem[i-1]=elem[i];
            curlen--;
            return e1;
        }
    }
}
template <class T>
void SqList<T>::inverse() {
    int i,m,n;
    T temp;
    n=curlen;
    m=n/2;
    for(i=0;i<m;i++){
        temp=elem[i];
        elem[i]=elem[n-1-i];
        elem[n-1-i]=temp;
    }
}
template <class T>
void SqList<T>::print() {
    int i;
    for(i=0;i<curlen;i++){
        cout<<elem[i]<<" ";
    }
    cout<<endl;
}
int main(){
    char a[]={'a','b','c','d','e'};
    SqList<char> list(a,5);
    list.print();
    char e1='W';
    list.insert(4,e1);
    list.print();
    list.dele(4);
    list.print();
    list.inverse();
    list.print();
    return  0;
}
